<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<div th:replace="~{commons/commons::head}"></div>

<body>
<!-- 顶部导航栏 -->
<div th:replace="~{commons/commons::topbar}"></div>

<div class="container-fluid">
  <div class="row">
    <!-- 侧边栏 -->
    <div th:replace="~{commons/commons::siderbar(active='idor_vertical.html')}"></div>

    <main role="main" class="col-md-10 offset-md-2 pt-3 main">
      <div class="card">
        <div class="card-header py-1">
          <div class="vul_header">
            <span>垂直越权</span>
          </div>
        </div>
        <div class="card-body">
          <ul class="nav nav-tabs">
            <li class="nav-item">
              <a class="nav-link active" data-toggle="tab" href="#vulDescription">
                漏洞描述</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" data-toggle="tab" href="#secureCoding"> 安全编码</a>
            </li>
          </ul>

          <div class="tab-content">
            <div class="tab-pane active" id="vulDescription">
              <div class="alert alert-desc"><i class="lnr lnr-alarm"></i>
                越权漏洞，应用在检查授权时存在纰漏，使得攻击者在获得低权限用户账户后，利用一些方式绕过权限检查，访问或者操作其他用户或者更高权限。<br>
                越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定，一旦权限验证不充分，就会导致越权漏洞。
              </div>
            </div>
            <div class="tab-pane fade" id="secureCoding">
              <div class="alert alert-desc">
                <li>【必须】权限校验</li>
                对于非公共操作，应当校验当前访问账号进行操作权限和数据权限校验。<br>
                1. 验证当前用户的登录态<br>
                2. 从可信结构中获取经过校验的当前请求账号的身份信息（如：session）。禁止从用户请求参数或Cookie中获取外部传入不可信用户身份直接进行查询。<br>
                3. 校验当前用户是否具备该操作权限<br>
                4. 校验当前用户是否具备所操作数据的权限，避免越权。
              </div>
            </div>
          </div>
        </div>
      </div>

      <div class="box-float">
        <div class="float1">
          <a target="_blank" class="btn btn-sm btn-danger run-btn"
             href="/vulnapi/IDOR/vul/admin">
            <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor"
                 viewBox="0 0 16 16">
              <path d="m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z"/>
            </svg>
            <span class="align-middle"> Run</span></a>
          <h5><span class="lnr lnr-bug"> 漏洞代码</span></h5>

          <textarea class="form-control" id="code1">
/**
 * 常见场景：在没有配置菜单权限的情况下，管理页面接口可能未做访问限制
 */
public String vul() {
    return "admin";
}
                    </textarea>
        </div>

        <div class="float2">
          <a target="_blank" class="btn btn-sm btn-success run-btn"
             href="/vulnapi/IDOR/safe/admin">
            <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor"
                 viewBox="0 0 16 16">
              <path d="m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z"/>
            </svg>
            <span class="align-middle"> Run</span></a>
          <h5><span class="lnr lnr-smile"> 安全代码</span></h5>

          <textarea class="form-control" id="code2">
/**
 * Spring MVC Interceptor 管理员拦截器
 */
@Component
public class AdminOnlyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        if (session.getAttribute("LoginUser").equals("admin")) {
            return true;
        } else {
            return false;
        }
    }
}
                    </textarea>
        </div>
      </div>
    </main>
  </div>
</div>

<!-- 引入script -->
<div th:replace="~{commons/commons::script}"></div>


</body>

</html>